package SBD.CRUD;

import SBD.Servicios.Conexion;
import SBD.Servicios.FactoriaServicios;
import EP.Web.Pagina;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
* @class PaginaBD
* @author Mauricio Alvarez.
* @brief Esta clase tiene los metodos de operación a la base de datos de la clase Pagina.
*/
public class PaginaBD
{

    /**
     *  @var List<Pagina> ListaPaginas
     *  @brief Listado de paginas de la BD.
    */
    private List<Pagina> ListaPaginas = new ArrayList();


    //////////////////////////
    // OPERACIONES
    //////////////////////////

    /**
     * @brief Clase que carga los datos de las pagina de la base de datos (OK)
     * @param Cantidad Paginas.
     * @return ArrayList<Pagina>
    */
    public List<Pagina> CargarPagina(int CantidadPaginas) throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException, Error, IOException
    {

        Conexion cdb = FactoriaServicios.getInstancia().getConexionBD();

        //Si se seleccionaron todas las páginas desde interfaz:
        if (CantidadPaginas == -1)
        {
            cdb.un_sql = "SELECT * FROM PAGINA";
            cdb.resultado = cdb.un_st.executeQuery(cdb.un_sql);
            if (cdb.resultado != null)
            {
                while (cdb.resultado.next())
                {
                    Pagina p = new Pagina();

                    //Se obtienen los atributos de las páginas: 
                    p.setId_pagina(cdb.resultado.getInt("id_pagina"));
                    p.setHost(cdb.resultado.getString("host"));
                    p.setUrl(cdb.resultado.getString("url"));
                    p.setTitulo(cdb.resultado.getString("titulo"));
                    p.setContenido(cdb.resultado.getString("contenido"));
                    p.setEs_semilla(cdb.resultado.getInt("es_semilla"));
                    p.setNivel_grafo(cdb.resultado.getInt("es_semilla"));

                    ListaPaginas.add(p);
                }
            }else{
                //Generación de error
                //throw new Error(-1, "Consulta a Registro " + p.getUrl() + "a devuelto un recorset null. Ubicación= " +
                //        this.getClass().getName());
            }

        }//Si se seleccionaron todas las páginas desde interfaz.

        //Si se seleccionaron las k primeras páginas.
        if (CantidadPaginas >= 0)
        {
            cdb.un_sql = "SELECT * FROM PAGINA LIMIT 0, "+ CantidadPaginas +";";
            cdb.resultado = cdb.un_st.executeQuery(cdb.un_sql);
            if (cdb.resultado != null)
            {
                while (cdb.resultado.next())
                {
                    Pagina p = new Pagina();

                    //Se obtienen los atributos de las páginas:
                    p.setId_pagina(cdb.resultado.getInt("id_pagina"));
                    p.setHost(cdb.resultado.getString("host"));
                    p.setUrl(cdb.resultado.getString("url"));
                    p.setTitulo(cdb.resultado.getString("titulo"));
                    p.setContenido(cdb.resultado.getString("contenido"));
                    p.setEs_semilla(cdb.resultado.getInt("es_semilla"));
                    p.setNivel_grafo(cdb.resultado.getInt("nivel_grafo"));

                    ListaPaginas.add(p);
                }
            }else{
                //Generación de error
                //throw new Error(-1, "Consulta a Registro " + p.getUrl() + "a devuelto un recorset null. Ubicación= " +
                //        this.getClass().getName());
            }

        }//Si se seleccionaron las k primeras páginas.

        return ListaPaginas;

    }//FIN CargarPagina


    /**
     * @brief Devuelve la cantidad de paginas rastreadas al momento.
     * @param No tiene.
     * @return int
    */
    public int NumeroPaginas() throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException, IOException {

        int Npaginas = 1;
        Conexion cdb = FactoriaServicios.getInstancia().getConexionBD();

        cdb.un_sql = "SELECT count(*) AS contador FROM PAGINA";
        cdb.resultado = cdb.un_st.executeQuery(cdb.un_sql);
        if (cdb.resultado != null)
        {
            while (cdb.resultado.next())
            {
                Npaginas = cdb.resultado.getInt("contador");
            }
            return Npaginas;
        }else{
            return 1;
        }

    }


}//FIN CLASE PaginaBD
